package com.alinesno.cloud.base.boot.service;

import java.io.IOException;
import java.net.URISyntaxException;
import java.util.Map;

import org.springframework.data.repository.NoRepositoryBean;

import com.alinesno.cloud.base.boot.entity.ManagerApplicationEntity;
import com.alinesno.cloud.base.boot.entity.ManagerSourceGenerateEntity;
import com.alinesno.cloud.common.facade.services.IBaseService;

/**
 * <p>  服务类 </p>
 *
 * @author WeiXiaoJin
 * @since 2019-04-17 07:44:37
 */
@NoRepositoryBean
public interface IManagerSourceGenerateService extends IBaseService<ManagerSourceGenerateEntity, String> {

	public static final String BUILD_DOCKER_STATUS_NORMARL = "0" ;  // 未构建 
	public static final String BUILD_DOCKER_STATUS_DOING = "1" ;  // 构建中
	public static final String BUILD_DOCKER_STATUS_SUCCESS = "2" ;  // 构建成功
	public static final String BUILD_DOCKER_STATUS_FAIL = "3" ;  // 构建失败
	public static final String BUILD_DOCKER_STATUS_QUEUE = "4" ;  // 构建排队中

	/**
	 * 发布k8s服务
	 * @param id
	 * @param env 环境(开发环境dev|测试环境test|生产环境pro)
	 * @return
	 */
	boolean buildK8S(String id , String env) ; 
	
	/**
	 * 构建docker镜像状态
	 * @param id 代码id
	 * @return 完成false|进行中true
	 * @throws IOException 
	 */
	boolean buildDockerStatus(String id) throws IOException ; 

	/**
	 * 构建镜像状态
	 * @param id
	 * @return
	 * @throws IOException
	 */
	String isBuildDockerSuccess(String id) throws IOException ; 

	/**
	 * 
	 * @param e
	 * @return
	 * @throws IOException
	 */
	String isBuildDockerSuccess(ManagerSourceGenerateEntity e) throws IOException ; 
	
	/**
	 * 创建docker镜像，并上传阿里云
	 * @param id 代码id 
	 * @param isPublic 是否发布开发环境
	 * @throws IOException 
	 */
	String buildDocker(String id , boolean isPublic) throws IOException ;  
	
	/**
	 * 生成代码并返回生成的代码数据包
	 * @param id
	 * @return
	 * @throws IOException 
	 */
	byte[] generatorCode(String id) throws IOException;

	/**
	 * 生成git主键地址 <br/>
	 * 思路:<br/>
	 * 1. 判断仓库是否存在,不存在则远程创建<br/>
	 * 2. 克隆远程仓库到本地,然后代码生成器生成代码并提交<br/>
	 * 3. 提交完成之后，返回远程仓库地址，同时更新数据库远程仓库地址<br/>
	 * @param id
	 * @return
	 * @throws IOException 
	 */
	String git(String id) throws IOException ; 

	/**
	 * 处理思路:<br/>
	 * 1. 配置Jenkins工程和基础命令<br/>
	 * 2. 配置完成之后，触发构建，如果配置了docker,同时返回docker镜像地址<br/>
	 * @param id
	 * @return
	 * @throws URISyntaxException 
	 * @throws IOException 
	 */
	String jenkins(String id) throws IOException, URISyntaxException;

	/**
	 * 自动创建工程过程 
	 * @param app
	 * @param source
	 * @return  返回参数列表 <br/>
	 * gitPath git地址  <br/>
	 * jenkinsPath jenkins地址  <br/>
	 * dockerPath docker镜像路径 
	 */
	Map<String, String> projectAutoBuild(ManagerApplicationEntity app, ManagerSourceGenerateEntity source);

	/**
	 * 验证数据库是否可用
	 * @param dbUrl
	 * @param dbUser
	 * @param dbPwd
	 * @return
	 */
	boolean checkDatabaseUseable(String dbUrl, String dbUser, String dbPwd);

	/**
	 * 验证git仓库是否可用
	 * @param gitRepositoryUrl
	 * @param gitUserName
	 * @param gitPassword
	 * @return
	 */
	boolean checkGitrepositoryUseable(String gitRepositoryUrl, String gitUserName, String gitPassword); 
	
}
